FB a dlouhe ulozene procedury

Otázka od: Jan Rizek

25. 8. 2004 15:21

Vsechny zdravim,

  pokud pustim (zavolam) ulozenou proceduru, ktera trva napriklad 3 minuty, a
behem techto 3 minut zavolam nejaky update, jak to FB zpracuje? vykona update
az po skonceni ulozene procedury nebo ji prerusi, vykona update a pak ji
dokonci?

Rekl bych, ze update by se mel vykonat az po skonceni U.P. Ale je to tak?

Neni na to nejake nastavovatko?  

  JR


Odpovedá: Jan Rizek

25. 8. 2004 15:39

Pokud to pustim v jedne transakci, tak se to provede po sobe, pokud ve dvou
ruznych, tak se to provede asynchrone. Je to tak?


Odpovedá: Slavomir Skopalik

25. 8. 2004 16:09

> pokud pustim (zavolam) ulozenou proceduru, ktera trva
> napriklad 3 minuty, a behem techto 3 minut zavolam nejaky
> update, jak to FB zpracuje? vykona update az po skonceni
> ulozene procedury nebo ji prerusi, vykona update a pak ji dokonci?

NE provede se behem behu SP.
Pri normalnim a smysluplnem pouzivani transakci to vysledek SP neovlivni
(pokud nebude provadet update toho sameho radku).

>
> Rekl bych, ze update by se mel vykonat az po skonceni U.P.
> Ale je to tak?

Proboha proc ?

>
> Neni na to nejake nastavovatko?  

Ne nastesti tohle NEJDE nastavit.

 Slavek


Odpovedá: Slavomir Skopalik

25. 8. 2004 16:13

>
> Pokud to pustim v jedne transakci, tak se to provede po sobe,

V jedne transakci by mel bezet zaroven POUZE jeden prikaz,
dokonce by tohle melo platit i o connection.

> pokud ve dvou ruznych, tak se to provede asynchrone. Je to tak?

ANO, ale jinak to zaroven ani pustit nejde (tedy, aby to bylo ciste).

 Slavek


Odpovedá: Jan Rizek

25. 8. 2004 16:13

> (pokud nebude provadet update toho sameho radku).
>
>
> Proboha proc ?
>

To je ten duvod - pokud zmenim updatem redek, ktery potom bude menit Ul.p.,
tak dojde ke konfliktu.. Chtel jsem se nejak vyhnout zamykani radku, ale asi
to nejde.. Kazdy radek musi byt oznacen, zda je zamknuty ci nikoliv. Nebo to
musi byt ulozeno nekde jinde v DB.. Jsou s tim starosti, tak me zajimalo,
zda se to neda nejak obejit..



Odpovedá: Jan Rizek

25. 8. 2004 16:21

> V jedne transakci by mel bezet zaroven POUZE jeden prikaz,
> dokonce by tohle melo platit i o connection.

To znamena, ze pro kazdy dataset - napr. IBClientDataset pouzivate jinou
transakci? To mi prijde dost silene..

Pokud pouziji jen jednu transakci, tak mohu provest 10 kroku s 10 datasety a
na konec to vsechno odvolat jednim rollback-em.. Ve vasem pripade bych musel
rollback volat 10x. A nevim zda je uplne ciste volat 10x commit. Zda pokazde
projde. Po pravde receno nevim, zda je mozne, aby commit neprosel..



Odpovedá: Slavomir Skopalik

25. 8. 2004 16:21

> To je ten duvod - pokud zmenim updatem redek, ktery potom
> bude menit Ul.p., tak dojde ke konfliktu.. Chtel jsem se
> nejak vyhnout zamykani radku, ale asi to nejde.. Kazdy radek
> musi byt oznacen, zda je zamknuty ci nikoliv. Nebo to musi
> byt ulozeno nekde jinde v DB.. Jsou s tim starosti, tak me
> zajimalo, zda se to neda nejak obejit..

Pokud pouzijes SNAPSHOT transakci, tak neni co resit.
Proste ten kdo prijde pozdeji, tak padne.
O nic se nemusis starat.
Pokud chces mermomoci zamykat radky, tak pomoci fake update,
tj. provedes update, ale ni nezmenis.

UPDATE tabl SEL id=id WHERE ...

Jo, jeste doporucuji NOWAIT pro transakce  .

 Slavek


Odpovedá: Slavomir Skopalik

25. 8. 2004 17:43

Co takle si to poradne precist ?

Aby mohly prikazy bezet zaroven MUSU byt ve vice vlaknech, nebo
procesech.
A pokud pristupuji k DB z vice vlaken, tak co vlakno, to samostatna
databaze.
Pokud pristupujes z jednoho vlakna, tak si soubezne nic nepustis.

 Slavek

> > V jedne transakci by mel bezet zaroven POUZE jeden prikaz,
> dokonce by
> > tohle melo platit i o connection.
>
> To znamena, ze pro kazdy dataset - napr. IBClientDataset
> pouzivate jinou transakci? To mi prijde dost silene..
>
> Pokud pouziji jen jednu transakci, tak mohu provest 10 kroku
> s 10 datasety a na konec to vsechno odvolat jednim
> rollback-em.. Ve vasem pripade bych musel rollback volat 10x.
> A nevim zda je uplne ciste volat 10x commit. Zda pokazde
> projde. Po pravde receno nevim, zda je mozne, aby commit neprosel..


Odpovedá: Jan Rizek

25. 8. 2004 19:55



> Aby mohly prikazy bezet zaroven MUSU byt ve vice vlaknech, nebo
> procesech.
> A pokud pristupuji k DB z vice vlaken, tak co vlakno, to samostatna
> databaze.

Myslel jste samostatna transakce? OK asi Vam rozumim..  


Odpovedá: Slavomir Skopalik

25. 8. 2004 20:33

Komponenta TIBDatabase  
Transakce nestaci  

 Slavek

> > Aby mohly prikazy bezet zaroven MUSU byt ve vice vlaknech, nebo
> > procesech. A pokud pristupuji k DB z vice vlaken, tak co vlakno, to
> > samostatna databaze.
>
> Myslel jste samostatna transakce? OK asi Vam rozumim..